/**
 * 认证相关工具函数
 * @author 王勇程 <laughskydragon@qq.com>
 */

import { md5 } from './common.js'
import APP_CONFIG from '@/config'

/**
 * 生成访问令牌
 * 算法：md5('1yan9ding' + 当前日期(Ymd) + API_KEY)
 * @param {string} apiKey API密钥（可选，默认从配置获取）
 * @returns {string} 访问令牌
 */
export function generateAccessToken(apiKey = APP_CONFIG.API_KEY) {
  // 获取当前日期，格式为Ymd（如：20250118）
  const now = new Date()
  const year = now.getFullYear()
  const month = String(now.getMonth() + 1).padStart(2, '0')
  const day = String(now.getDate()).padStart(2, '0')
  const dateStr = `${year}${month}${day}`
  
  // 按照后端算法：'1yan9ding' + 日期 + API_KEY
  const tokenData = `1yan9ding${dateStr}${apiKey}`
  
  // 使用MD5加密
  const accessToken = md5(tokenData)
  
  return accessToken
}



/**
 * 检查token是否有效
 * @param {string} token 
 * @returns {boolean}
 */
export function isTokenValid(token) {
  if (!token) return false
  
  try {
    const decoded = atob(token)
    const parts = decoded.split('_')
    if (parts.length !== 3) return false
    
    const timestamp = parseInt(parts[1])
    const now = Math.floor(Date.now() / 1000)
    
    // token有效期24小时
    return (now - timestamp) < 86400
  } catch (e) {
    return false
  }
}

/**
 * 微信登录
 * @returns {Promise}
 */
export function wxLogin() {
  return new Promise((resolve, reject) => {
    uni.login({
      provider: 'weixin',
      success: (loginRes) => {
        console.log('微信登录成功', loginRes)
        
        // 获取用户信息
        uni.getUserInfo({
          provider: 'weixin',
          success: (userRes) => {
            console.log('获取用户信息成功', userRes)
            resolve({
              code: loginRes.code,
              userInfo: userRes.userInfo
            })
          },
          fail: (err) => {
            console.error('获取用户信息失败', err)
            reject(err)
          }
        })
      },
      fail: (err) => {
        console.error('微信登录失败', err)
        reject(err)
      }
    })
  })
}

/**
 * 检查登录状态
 * @returns {boolean}
 */
export function checkLoginStatus() {
  const userToken = uni.getStorageSync('user_token')
  const userInfo = uni.getStorageSync('user_info')
  
  return !!(userToken && userInfo)
}

/**
 * 清除登录信息
 */
export function clearLoginInfo() {
  uni.removeStorageSync('user_token')
  uni.removeStorageSync('user_info')
}

/**
 * 获取用户token
 * @returns {string}
 */
export function getUserToken() {
  return uni.getStorageSync('user_token') || ''
}

/**
 * 获取用户信息
 * @returns {object}
 */
export function getUserInfo() {
  return uni.getStorageSync('user_info') || {}
}